home *** CD-ROM | disk | FTP | other *** search
/ Collection of Tools & Utilities / Collection of Tools and Utilities.iso / pascal / qwik55.zip / QWIKREF.DOC < prev    next >
Text File  |  1989-08-24  |  77KB  |  1,687 lines

  1.  
  2.  
  3.  
  4.  
  5.  
  6.  
  7.  
  8.  
  9.  
  10.  
  11.  
  12.  
  13.  
  14.  
  15.  
  16.  
  17.  
  18.  
  19.  
  20.                               QWIK SCREEN UTILITIES
  21.                                  REFERENCE GUIDE
  22.  
  23.                                    Version 5.5
  24.                                   March 4, 1989
  25.  
  26.  
  27.                Copyright (C) 1988-1989 Eagle Performance Software
  28.                               All Rights Reserved.
  29.  
  30.  
  31.  
  32.                                _______
  33.                           ____|__     |               (tm)
  34.                        --|       |    |-------------------
  35.                          |   ____|__  |  Association of
  36.                          |  |       |_|  Shareware
  37.                          |__|   o   |    Professionals
  38.                        -----|   |   |---------------------
  39.                             |___|___|    MEMBER
  40.    QWIK Screen Utilities                        Reference Guide, Version 5.5
  41.  
  42.  
  43.  
  44.                        T A B L E   O F   C O N T E N T S
  45.  
  46.         1. INTRODUCTION  . . . . . . . . . . . . . . . . . . . . . 4
  47.              Purpose . . . . . . . . . . . . . . . . . . . . . . . 4
  48.              Common Parameters . . . . . . . . . . . . . . . . . . 4
  49.              Attributes  . . . . . . . . . . . . . . . . . . . . . 5
  50.  
  51.         2. PROCEDURES AND FUNCTIONS  . . . . . . . . . . . . . . . 7
  52.              EosC  . . . . . . . . . . . . . . . . . . . . . . . . 7
  53.              EosLn . . . . . . . . . . . . . . . . . . . . . . . . 7
  54.              EosR  . . . . . . . . . . . . . . . . . . . . . . . . 7
  55.              EosToCursor . . . . . . . . . . . . . . . . . . . . . 7
  56.              EosToRC . . . . . . . . . . . . . . . . . . . . . . . 7
  57.              EosToRCrel  . . . . . . . . . . . . . . . . . . . . . 8
  58.              GetCursor . . . . . . . . . . . . . . . . . . . . . . 8
  59.              GetSubModelID . . . . . . . . . . . . . . . . . . . . 8
  60.              GotoEos . . . . . . . . . . . . . . . . . . . . . . . 8
  61.              GotoRC. . . . . . . . . . . . . . . . . . . . . . . . 9
  62.              ModCursor . . . . . . . . . . . . . . . . . . . . . . 9
  63.              Qattr . . . . . . . . . . . . . . . . . . . . . . . . 9
  64.              QattrC  . . . . . . . . . . . . . . . . . . . . . . . 10
  65.              QattrEos  . . . . . . . . . . . . . . . . . . . . . . 10
  66.              QEosLn  . . . . . . . . . . . . . . . . . . . . . . . 10
  67.              Qfill . . . . . . . . . . . . . . . . . . . . . . . . 11
  68.              QfillC  . . . . . . . . . . . . . . . . . . . . . . . 11
  69.              QfillEos  . . . . . . . . . . . . . . . . . . . . . . 11
  70.              Qinit . . . . . . . . . . . . . . . . . . . . . . . . 12
  71.              QreadAttr . . . . . . . . . . . . . . . . . . . . . . 12
  72.              QreadChar . . . . . . . . . . . . . . . . . . . . . . 12
  73.              QreadStr  . . . . . . . . . . . . . . . . . . . . . . 12
  74.              QscrollDown . . . . . . . . . . . . . . . . . . . . . 13
  75.              QscrollUp . . . . . . . . . . . . . . . . . . . . . . 13
  76.              QScrToVscr  . . . . . . . . . . . . . . . . . . . . . 13
  77.              QstoreToMem . . . . . . . . . . . . . . . . . . . . . 14
  78.              QstoreToScr . . . . . . . . . . . . . . . . . . . . . 15
  79.              QviewPage . . . . . . . . . . . . . . . . . . . . . . 16
  80.              QVscrToScr  . . . . . . . . . . . . . . . . . . . . . 16
  81.              Qwrite  . . . . . . . . . . . . . . . . . . . . . . . 17
  82.              QwriteA . . . . . . . . . . . . . . . . . . . . . . . 17
  83.              QwriteC . . . . . . . . . . . . . . . . . . . . . . . 18
  84.              QwriteEos . . . . . . . . . . . . . . . . . . . . . . 18
  85.              QwriteEosA  . . . . . . . . . . . . . . . . . . . . . 19
  86.              QwritePage  . . . . . . . . . . . . . . . . . . . . . 19
  87.              SetCursor . . . . . . . . . . . . . . . . . . . . . . 19
  88.              SetMultiTask  . . . . . . . . . . . . . . . . . . . . 20
  89.              StrL  . . . . . . . . . . . . . . . . . . . . . . . . 21
  90.              StrLF . . . . . . . . . . . . . . . . . . . . . . . . 21
  91.              StrR  . . . . . . . . . . . . . . . . . . . . . . . . 21
  92.              StrRF . . . . . . . . . . . . . . . . . . . . . . . . 21
  93.              StrRFD  . . . . . . . . . . . . . . . . . . . . . . . 22
  94.              WhereC  . . . . . . . . . . . . . . . . . . . . . . . 22
  95.              WhereR  . . . . . . . . . . . . . . . . . . . . . . . 22
  96.  
  97.  
  98.  
  99.  
  100.                                        2
  101.    QWIK Screen Utilities                        Reference Guide, Version 5.5
  102.  
  103.  
  104.         3. VARIABLES . . . . . . . . . . . . . . . . . . . . . . . 23
  105.              System Hardware . . . . . . . . . . . . . . . . . . . 23
  106.              Video Hardware  . . . . . . . . . . . . . . . . . . . 24
  107.              Video Software  . . . . . . . . . . . . . . . . . . . 26
  108.              Video Cursor  . . . . . . . . . . . . . . . . . . . . 28
  109.  
  110.  
  111.  
  112.  
  113.  
  114.  
  115.  
  116.  
  117.  
  118.  
  119.  
  120.  
  121.  
  122.  
  123.  
  124.  
  125.  
  126.  
  127.  
  128.  
  129.  
  130.  
  131.  
  132.  
  133.  
  134.  
  135.  
  136.  
  137.  
  138.  
  139.  
  140.  
  141.  
  142.  
  143.  
  144.  
  145.  
  146.  
  147.  
  148.  
  149.  
  150.  
  151.  
  152.  
  153.  
  154.  
  155.  
  156.  
  157.  
  158.  
  159.  
  160.  
  161.                                        3
  162.    QWIK Screen Utilities                        Reference Guide, Version 5.5
  163.  
  164.  
  165.    1.  I N T R O D U C T I O N
  166.  
  167.  
  168.    PURPOSE
  169.  
  170.    This document is a QWIK technical reference manual describing each routine
  171.    and variable in detail in a format similar to the TP manual.  The routines
  172.    are described in alphabetical order.  Since this manual is on disk, you can
  173.    find your interest easily with a search utility.
  174.  
  175.    Application - All QWIK procedures will perform in the following
  176.    applications:
  177.  
  178.      . All video text modes - 0, 1, 2, 3 and 7.
  179.      . Any column mode - 40, 80, or variable.
  180.      . For IBM PC, XT, AT, PCjr, PC convertible, all PS/2 models, 3270 PC, and
  181.        compatibles.
  182.      . With MDA, CGA, EGA, MCGA, VGA, 8214/A, all Hercules video cards.
  183.      . Perform routines in absolute coordinates rather than window-relative
  184.        coordinates.
  185.      . Capitalizes on the use of faster multi-tasking video buffers (MTVB).
  186.  
  187.    For window-relative writing routines, see WNDW55.ARC.
  188.  
  189.  
  190.    COMMON PARAMETERS
  191.  
  192.    Common Parameters - Most procedures use the same parameters.  Rather than
  193.    repeating them for each routine, detailed descriptions for those parameters
  194.    are listed below.
  195.  
  196.    Screen Coordinates - QWIK routines work in absolute coordinates to give you
  197.    full control of the screen.  The routines do not check for bounds on the
  198.    screen, so be sure to stay in range.  The upper left column on the screen
  199.    is row 1, column 1, which is also called 1-based.  The routines also wrap
  200.    to the next line; they do not truncate at EOL.  For example, Row:=1 and
  201.    Col:=255 is equivalent to Row:=3 and Col:=15 on a screen with 80 columns.
  202.    But this is not a recommended practice for variable screen widths.
  203.  
  204.    Row/Col - Row and Col were chosen in lieu of the X/Y scheme used in TP.
  205.    Since QWIK is for only text modes, the screen is treated like a word
  206.    processor with rows and columns.  It is more intuitive to use the X/Y
  207.    scheme in graphics and the Row/Col scheme for text.
  208.  
  209.    ColL/ColR - In the self-centering routines, the left and right columns are
  210.    simply averaged.  To center on the full width of an 80 column display, set
  211.    ColL:=1 and ColR:=80.  To center on a certain column number, set both
  212.    values equal to that column number.  Or, to center on any screen, set
  213.    ColL:=1 and ColR:=CRTcols.
  214.  
  215.    Rows/Cols - Using Rows/Cols is much easier than Row2/Col2 to describe the
  216.    height and width of a block such as:
  217.  
  218.       QstoreToMem (Row,Col,Rows,Cols,MyPtr^);
  219.  
  220.  
  221.  
  222.    Chapter 1, Introduction                                             Page 4
  223.    QWIK Screen Utilities                        Reference Guide, Version 5.5
  224.  
  225.  
  226.    Should you decide to move a block, only Row and Col need to be changed, and
  227.    therefore Rows and Cols don't need to be mentally recalculated and altered.
  228.    Please keep Cols limited to one row.  Zero values will simply exit the
  229.    routine.
  230.  
  231.    aStr - One of the nice improvements since TP 4.0 is that the address of the
  232.    string, aStr, is always passed onto to the stack no matter if it's a string
  233.    value or a variable.  So, internally, QWIK does not need to copy strings to
  234.    the stack and thereby increasing speed.  The Qwrite* procedures use this
  235.    address even if hard-coded strings are passed as a parameter.
  236.  
  237.  
  238.    ATTRIBUTES
  239.  
  240.    Attr - Use the convenient attribute constants for the foreground  and
  241.    background colors supplied in the unit rather than having to use TP
  242.    functions or procedures to get a desired color, for example:
  243.  
  244.      Qwrite ( 1, 1,White+BlueBG,'My String');
  245.  
  246.    will write the text with white on blue attributes.  Of course, you can
  247.    still use Turbo's TextColor and TextBackground procedures, and then use
  248.    TextAttr as a parameter.  The foreground constants are duplicates of those
  249.    in TP4:
  250.  
  251.      Black        = $00;       DarkGray     = $08;
  252.      Blue         = $01;       LightBlue    = $09;
  253.      Green        = $02;       LightGreen   = $0A;
  254.      Cyan         = $03;       LightCyan    = $0B;
  255.      Red          = $04;       LightRed     = $0C;
  256.      Magenta      = $05;       LightMagenta = $0D;
  257.      Brown        = $06;       Yellow       = $0E;
  258.      LightGray    = $07;       White        = $0F;
  259.      Blink        = $80;
  260.  
  261.    For convenience, background color constants were included to take advantage
  262.    of constant folding.
  263.  
  264.      BlackBG      = $00;
  265.      BlueBG       = $10;
  266.      GreenBG      = $20;
  267.      CyanBG       = $30;
  268.      RedBG        = $40;
  269.      MagentaBG    = $50;
  270.      BrownBG      = $60;
  271.      LightGrayBG  = $70;
  272.      SameAttr     =  -1;
  273.  
  274.    SameAttr - A powerful and unique feature of all QWIK routines is the use of
  275.    the constant SameAttr.  If SameAttr, or a negative value, is used as an
  276.    attribute, the routine will suppress any changes to the attributes and use
  277.    what is currently on the screen.
  278.  
  279.    3270 PC Attributes - Be aware that the 3270 PC ignores the foreground
  280.    intensity bit, so there are only 8 colors.  In addition, 4 colors have
  281.  
  282.  
  283.    Chapter 1, Introduction                                             Page 5
  284.    QWIK Screen Utilities                        Reference Guide, Version 5.5
  285.  
  286.  
  287.    different tints:
  288.  
  289.      PC Color     3270 PC Color
  290.      ------------ -------------
  291.      Cyan         Turquoise
  292.      Magenta      Pink
  293.      Brown        Yellow
  294.      Light Gray   White
  295.  
  296.  
  297.  
  298.  
  299.  
  300.  
  301.  
  302.  
  303.  
  304.  
  305.  
  306.  
  307.  
  308.  
  309.  
  310.  
  311.  
  312.  
  313.  
  314.  
  315.  
  316.  
  317.  
  318.  
  319.  
  320.  
  321.  
  322.  
  323.  
  324.  
  325.  
  326.  
  327.  
  328.  
  329.  
  330.  
  331.  
  332.  
  333.  
  334.  
  335.  
  336.  
  337.  
  338.  
  339.  
  340.  
  341.  
  342.  
  343.  
  344.    Chapter 1, Introduction                                             Page 6
  345.    QWIK Screen Utilities                        Reference Guide, Version 5.5
  346.  
  347.  
  348.    2.  P R O C E D U R E S   A N D   F U N C T I O N S
  349.  
  350.    In this section, a detailed description is provided for each procedure and
  351.    function.
  352.  
  353.  
  354.    ---------------------------------------------------------------------------
  355.    EosC function                                                          Qwik
  356.    ---------------------------------------------------------------------------
  357.    Function       Returns the absolute column of the EOS marker.
  358.    Declaration    EosC
  359.    Result type    byte
  360.    Screens        All video pages and virtual screens.
  361.    Remarks        Operates on the currently written screen.  The upper left
  362.                   corner of the screen (1,1).
  363.    See also       EosR, EosToRC, EosToRCrel, EosToCursor, EosLn, GotoEos
  364.  
  365.    ---------------------------------------------------------------------------
  366.    EosLn procedure                                                        Qwik
  367.    ---------------------------------------------------------------------------
  368.    Function       Moves the EOS marker to column 1 of the next row.
  369.    Declaration    EosLn
  370.    Screens        All video pages and virtual screens.
  371.    Remarks        Operates on the currently written screen.
  372.    EOS            Updated.
  373.    Restrictions   EosLn can increment past the last row of a screen, but does
  374.                   not scroll up the screen.
  375.    See also       EosR, EosC, EosToRC, EosToRCrel, EosToCursor, GotoEos,
  376.                   QEosLn
  377.  
  378.    ---------------------------------------------------------------------------
  379.    EosR function                                                          Qwik
  380.    ---------------------------------------------------------------------------
  381.    Function       Returns the absolute row of the EOS marker.
  382.    Declaration    EosR
  383.    Result type    byte
  384.    Screens        All video pages and virtual screens.
  385.    Remarks        Operates on the currently written screen.
  386.    See also       EosC, EosToRC, EosToRCrel, EosToCursor, EosLn, GotoEos
  387.  
  388.    ---------------------------------------------------------------------------
  389.    EosToCursor procedure                                                  Qwik
  390.    ---------------------------------------------------------------------------
  391.    Function       Positions the EOS marker to where the cursor is.
  392.    Declaration    EosToCursor
  393.    Screens        All video pages only.
  394.    Remarks        The EOS marker is simply moved to match the position of the
  395.                   cursor of the currently written video page.
  396.    EOS            Updated.
  397.    See also       EosR, EosC, EosToRC, EosToRCrel, EosLn, GotoEos
  398.  
  399.    ---------------------------------------------------------------------------
  400.    EosToRC procedure                                                      Qwik
  401.    ---------------------------------------------------------------------------
  402.    Function       Positions the EOS marker.
  403.  
  404.  
  405.    Chapter 2, Procedures and Functions                                 Page 7
  406.    QWIK Screen Utilities                        Reference Guide, Version 5.5
  407.  
  408.  
  409.    Declaration    EosToRC (Row, Col: byte)
  410.    Screens        All video pages and virtual screens.
  411.    Remarks        Use this procedure to manually locate the EOS marker.  The
  412.                   Q*Eos procedures will write where this marker is located on
  413.                   the currently written screen.
  414.    EOS            Updated.
  415.    Restrictions   Stay within the screen limits.
  416.    See also       EosR, EosC, EosToRCrel, EosToCursor, EosLn, GotoEos
  417.  
  418.    ---------------------------------------------------------------------------
  419.    EosToRCrel procedure                                                   Qwik
  420.    ---------------------------------------------------------------------------
  421.    Function       Positions the EOS marker relative to its current position.
  422.    Declaration    EosToRCrel (Row, Col: integer)
  423.    Screens        All video pages and virtual screens.
  424.    Remarks        The relative values can be positive or negative.  The Q*Eos
  425.                   procedures will write where the EOS marker is located on the
  426.                   currently written screen.
  427.    EOS            Updated.
  428.    Restrictions   Stay within the screen limits.
  429.    See also       EosR, EosC, EosToRC, EosToCursor, EosLn, GotoEos
  430.  
  431.    ---------------------------------------------------------------------------
  432.    GetCursor function                                                     Qwik
  433.    ---------------------------------------------------------------------------
  434.    Function       Returns the cursor mode for the CRT.
  435.    Declaration    GetCursor
  436.    Result type    word
  437.    Screens        All video pages only.
  438.    Remarks        There is only one cursor mode variable that applies to what
  439.                   is currently viewed on the CRT and it is retrieved from low
  440.                   memory at $0040:$0060.
  441.    See also       SetCursor, ModCursor
  442.  
  443.    ---------------------------------------------------------------------------
  444.    GetSubModelID procedure                                                Qwik
  445.    ---------------------------------------------------------------------------
  446.    Function       Gets the SubModelID on IBM computers.
  447.    Declaration    GetSubModelID
  448.    Remarks        The SystemID and SubModelID variables are updated if a
  449.                   SubModelID exists.  It will only execute on recent models of
  450.                   XT, AT, and PS/2 models which have this ID.  Otherwise the
  451.                   variables will remain unaltered as set by Qinit.
  452.    Restrictions   PC or XT clones must recognize IBM's SystemID.
  453.    See also       QWIK55.DOC
  454.  
  455.    ---------------------------------------------------------------------------
  456.    GotoEos procedure                                                      Qwik
  457.    ---------------------------------------------------------------------------
  458.    Function       Positions the cursor where the EOS marker is.
  459.    Declaration    GotoEos
  460.    Screens        All video pages only.
  461.    Remarks        The cursor is simply moved to match the position of the EOS
  462.                   marker of the currently written video page.
  463.    EOS            Unaltered.
  464.  
  465.  
  466.    Chapter 2, Procedures and Functions                                 Page 8
  467.    QWIK Screen Utilities                        Reference Guide, Version 5.5
  468.  
  469.  
  470.    See also       EosR, EosC, EosToRC, EosToRCrel, EosToCursor, EosLn, GotoRC
  471.    Example        Center a string on the screen and place the cursor at the
  472.                   end of the string:
  473.  
  474.                     QwriteC (1,1,CRTcols,SameAttr,'My message ');
  475.                     GotoEos;
  476.  
  477.    ---------------------------------------------------------------------------
  478.    GotoRC procedure                                                       Qwik
  479.    ---------------------------------------------------------------------------
  480.    Function       Positions the cursor.
  481.    Declaration    GotoRC (Row, Col: byte)
  482.    Screens        All video pages only.
  483.    Remarks        The cursor is moved to the position absolute to the
  484.                   currently written video page.
  485.    EOS            Unaltered.
  486.    Restrictions   Stay within the screen limits.
  487.    See also       GotoEos, WhereR, WhereC
  488.  
  489.    ---------------------------------------------------------------------------
  490.    ModCursor procedure                                                    Qwik
  491.    ---------------------------------------------------------------------------
  492.    Function       Modifies the current cursor mode to turn on, off, or blink
  493.                   erratically.
  494.    Declaration    ModCursor (Bits13_14: word)
  495.    Screens        Any video page as viewed.
  496.    Remarks        Using the modification constants CursorOn, CursorOff, or
  497.                   CursorBlink for Bits13_14, the currently viewed cursor mode
  498.                   on the CRT will be modified accordingly.  The procedure only
  499.                   looks at bits 13 and 14 of Bits13_14 for the modification.
  500.                   The scan lines remain unaltered.
  501.    See also       GetCursor, SetCursor
  502.    Example        To turn the current cursor mode off:
  503.  
  504.                     ModCursor (CursorOff);
  505.  
  506.    ---------------------------------------------------------------------------
  507.    Qattr procedure                                                        Qwik
  508.    ---------------------------------------------------------------------------
  509.    Function       Changes just the attribute in a rows-by-columns block on the
  510.                   screen.
  511.    Declaration    Qattr (Row,Col,Rows,Cols: byte; Attr: integer)
  512.    Screens        All video pages and virtual screens.
  513.    Remarks        The upper left corner of the block starts at (Row,Col) and
  514.                   the block size is Rows by Cols.  Note that you can even
  515.                   change 1 row and/or 1 column.  If SameAttr is used for Attr
  516.                   or if Rows or Cols is zero, then nothing is written.
  517.    EOS            Updated.
  518.    Restrictions   Stay within the screen limits.
  519.    See also       QattrC, QattrEos
  520.    Example        To create inverse video on any screen:
  521.  
  522.                     Qattr (1,1,CRTrows,CRTcols,Black+LightGrayBG);
  523.  
  524.  
  525.  
  526.  
  527.    Chapter 2, Procedures and Functions                                 Page 9
  528.    QWIK Screen Utilities                        Reference Guide, Version 5.5
  529.  
  530.  
  531.    ---------------------------------------------------------------------------
  532.    QattrC procedure                                                       Qwik
  533.    ---------------------------------------------------------------------------
  534.    Function       Changes just the attribute in a rows-by-columns block on the
  535.                   screen and centers it between two columns.
  536.    Declaration    QattrC (Row,ColL,ColR,Rows,Cols: byte; Attr: integer)
  537.    Screens        All video pages and virtual screens.
  538.    Remarks        The upper left corner of the block starts at
  539.                   (Row,(ColL+ColR-Cols+1) shr 1) with a block size of Rows by
  540.                   Cols and centering it between the two columns ColL and ColR.
  541.                   Odd counts are shifted left.  If SameAttr is used for Attr
  542.                   or if Rows or Cols is zero, then nothing is written.
  543.    EOS            Updated.
  544.    Restrictions   Stay within the screen limits.
  545.    See also       Qattr, QattrEos
  546.    Example        A 30 character message centered on the screen in row 15,
  547.                   needs to be white on green:
  548.  
  549.                     QattrC (15,1,CRTcols,1,30,White+GreenBG);
  550.  
  551.                   The attribute will start to be changed in column 26 on an 80
  552.                   column screen.
  553.  
  554.    ---------------------------------------------------------------------------
  555.    QattrEos procedure                                                     Qwik
  556.    ---------------------------------------------------------------------------
  557.    Function       Changes just the attribute in a rows-by-columns block on the
  558.                   current screen starting at the EOS marker.
  559.    Declaration    QattrEos (Rows,Cols: byte; Attr: integer)
  560.    Screens        All video pages and virtual screens.
  561.    Remarks        The upper left corner of the block starts at the previously
  562.                   set EOS marker and the block size is Rows by Cols.  If
  563.                   SameAttr is used for Attr or if Rows or Cols is zero, then
  564.                   nothing is written.
  565.    Restrictions   Stay within the screen limits.
  566.    EOS            Updated.
  567.    See also       Qattr, QattrC
  568.    Example        To highlight a 20 column data entry field at the EOS marker
  569.                   with yellow on magenta:
  570.  
  571.                     QattrEos (1,20,Yellow+MagentaBG);
  572.  
  573.    ---------------------------------------------------------------------------
  574.    QEosLn procedure                                                       Qwik
  575.    ---------------------------------------------------------------------------
  576.    Function       Moves the EOS marker to column 1 of the next row with a
  577.                   possible scroll up.
  578.    Declaration    QEosLn
  579.    Screens        All video pages and virtual screens.
  580.    Remarks        Operates on the currently written screen.  If EosR becomes
  581.                   greater than CRTrows, then the screen will scroll up.  The
  582.                   new blank row will have the attribute set by ScrollAttr
  583.                   which must be manually set before hand.
  584.    EOS            Updated to first cleared column of the cleared row.
  585.    See also       EosR, EosC, EosToRC, EosToRCrel, EosToCursor, GotoEos, EosLn
  586.  
  587.  
  588.    Chapter 2, Procedures and Functions                                 Page 10
  589.    QWIK Screen Utilities                        Reference Guide, Version 5.5
  590.  
  591.  
  592.  
  593.    ---------------------------------------------------------------------------
  594.    Qfill procedure                                                        Qwik
  595.    ---------------------------------------------------------------------------
  596.    Function       Fills the screen with a character with an optional attribute
  597.                   change in a rows-by-columns block on the current screen.
  598.    Declaration    Qfill (Row,Col,Rows,Cols: byte; Attr: integer; Ch: char)
  599.    Screens        All video pages and virtual screens.
  600.    Remarks        The upper left corner of the block starts at (Row,Col) and
  601.                   the block size is Rows by Cols.  If SameAttr is used for
  602.                   Attr, then the attribute will remain the same on the screen.
  603.                   If Rows or Cols is zero, then nothing is written.
  604.    EOS            Updated.
  605.    Restrictions   Stay within the screen limits.
  606.    See also       QfillC, QfillEos
  607.    Example        To clear the screen with black on brown attribute:
  608.  
  609.                     Qfill (1,1,CRTrows,CRTcols,Black+BrownBG,' ');
  610.  
  611.    ---------------------------------------------------------------------------
  612.    QfillC procedure                                                       Qwik
  613.    ---------------------------------------------------------------------------
  614.    Function       Fills the screen with a character and an optional attribute
  615.                   change in a rows-by-columns block on the current screen and
  616.                   centers it between two columns.
  617.    Declaration    QfillC (Row,ColL,ColR,Rows,Cols: byte;
  618.                           Attr: integer; Ch: char)
  619.    Screens        All video pages and virtual screens.
  620.    Remarks        The upper left corner of the block starts at
  621.                   (Row,(ColL+ColR-Cols+1) shr 1) with a block size of Rows by
  622.                   Cols and centered between the two columns ColL and ColR.
  623.                   Odd counts are shifted left.  If SameAttr is used for Attr,
  624.                   then the attribute will remain the same on the screen.  If
  625.                   Rows or Cols is zero, then nothing is written.
  626.    EOS            Updated.
  627.    Restrictions   Stay within the screen limits.
  628.    See also       Qfill, QfillEos
  629.    Example        Center 20 dashes on the screen in rows 1 to 5 with black on
  630.                   brown attributes:
  631.  
  632.                     QfillC (1,1,CRTcols,5,20,Black+BrownBG,'-');
  633.  
  634.    ---------------------------------------------------------------------------
  635.    QfillEos procedure                                                     Qwik
  636.    ---------------------------------------------------------------------------
  637.    Function       Fills the screen with a character with an optional attribute
  638.                   change in a rows-by-columns block on the current screen
  639.                   starting at the Eos marker.
  640.    Declaration    QfillEos (Rows,Cols: byte; Attr: integer; Ch: char)
  641.    Screens        All video pages and virtual screens.
  642.    Remarks        The upper left corner of the block starts at the previously
  643.                   set EOS marker and the block size is Rows by Cols.  If
  644.                   SameAttr is used for Attr, then the attribute will remain
  645.                   the same on the screen.  If Rows or Cols is zero, then
  646.                   nothing is written.
  647.  
  648.  
  649.    Chapter 2, Procedures and Functions                                 Page 11
  650.    QWIK Screen Utilities                        Reference Guide, Version 5.5
  651.  
  652.  
  653.    EOS            Updated.
  654.    Restrictions   Stay within the screen limits.
  655.    See also       Qfill, QfillC
  656.    Example        To clear a 20 column data entry field at the EOS marker with
  657.                   yellow on magenta:
  658.  
  659.                     QfillEos (1,20,Yellow+MagentaBG,' ');
  660.  
  661.    ---------------------------------------------------------------------------
  662.    Qinit procedure                                                        Qwik
  663.    ---------------------------------------------------------------------------
  664.    Function       Detects system, display, and video card(s).  Initializes
  665.                   global data for QWIK routines.
  666.    Declaration    Qinit
  667.    Remarks        Qinit is executed at startup.  Qinit only needs to be run
  668.                   again if there is a text mode change.
  669.    EOS            Set to (1,1).
  670.    See also       QWIK55.DOC, QINITEST.PAS, VARIABLES section below.
  671.  
  672.    ---------------------------------------------------------------------------
  673.    QreadAttr function                                                     Qwik
  674.    ---------------------------------------------------------------------------
  675.    Function       Reads an attribute from the current screen.
  676.    Declaration    QreadAttr (Row, Col: byte)
  677.    Result type    byte
  678.    Screens        All video pages and virtual screens.
  679.    Remarks        Reads an attribute from the screen at just one location.
  680.    EOS            Unaltered.
  681.    See also       QreadChar, QreadStr
  682.  
  683.    ---------------------------------------------------------------------------
  684.    QreadChar function                                                     Qwik
  685.    ---------------------------------------------------------------------------
  686.    Function       Reads a character from the current screen.
  687.    Declaration    QreadChar (Row, Col: byte)
  688.    Result type    byte
  689.    Screens        All video pages and virtual screens.
  690.    Remarks        Reads a character from the screen at just one location.
  691.    EOS            Unaltered.
  692.    See also       QreadAttr, QreadStr
  693.  
  694.    ---------------------------------------------------------------------------
  695.    QreadStr function                                                      Qwik
  696.    ---------------------------------------------------------------------------
  697.    Function       Reads a text string from the current screen.
  698.    Declaration    QreadStr (Row,Col,Cols: byte)
  699.    Result type    string
  700.    Screens        All video pages and virtual screens.
  701.    Remarks        Reads a string of characters from the screen.
  702.    EOS            Unaltered.
  703.    See also       QreadAttr, QreadChar
  704.  
  705.  
  706.  
  707.  
  708.  
  709.  
  710.    Chapter 2, Procedures and Functions                                 Page 12
  711.    QWIK Screen Utilities                        Reference Guide, Version 5.5
  712.  
  713.  
  714.    ---------------------------------------------------------------------------
  715.    QscrollDown procedure                                                  Qwik
  716.    ---------------------------------------------------------------------------
  717.    Function       Scrolls a rows-by-columns block down on the current screen
  718.                   and clears the top row of the block.
  719.    Declaration    QscrollDown (Row,Col,Rows,Cols: byte; BlankAttr: integer)
  720.    Screens        All video pages and virtual screens.
  721.    Remarks        To keep it simple, the block encompasses all affected rows
  722.                   including the row to be cleared.  The upper left corner of
  723.                   the block starts at (Row,Col) and the block size is Rows by
  724.                   Cols.  The bottom row will be scrolled out and lost while
  725.                   the top row will be cleared with the attribute of BlankAttr
  726.                   (SameAttr is permitted).  Note that you can even change 1
  727.                   row and/or 1 column.  The cursor is not moved, but is ready
  728.                   to be moved with GotoEos.  The CpuID lets the routine choose
  729.                   the best speed.
  730.    EOS            Updated to first cleared column of the cleared row.
  731.    Restrictions   Stay within the screen limits.
  732.    See also       QscrollUp, GotoEos
  733.    Example        To scroll down the entire screen and clear the top row with
  734.                   light cyan on blue:
  735.  
  736.                     QscrollDown (1,1,CRTrows,CRTcols,LightCyan+BlueBG);
  737.  
  738.  
  739.    ---------------------------------------------------------------------------
  740.    QscrollUp procedure                                                    Qwik
  741.    ---------------------------------------------------------------------------
  742.    Function       Scrolls a rows-by-columns block up on the current screen and
  743.                   clears the bottom row of the block.
  744.    Declaration    QscrollUp (Row,Col,Rows,Cols: byte; BlankAttr: integer)
  745.    Screens        All video pages and virtual screens.
  746.    Remarks        To keep it simple, the block encompasses all affected rows
  747.                   including the row to be cleared.  The upper left corner of
  748.                   the block starts at (Row,Col) and the block size is Rows by
  749.                   Cols.  The first row will be scrolled out and lost while the
  750.                   last row will be cleared with the attribute of BlankAttr
  751.                   (SameAttr is permitted).  Note that you can even change 1
  752.                   row and/or 1 column.  The cursor is not moved, but is ready
  753.                   to be moved with GotoEos.  The CpuID lets the routine choose
  754.                   the best speed.
  755.    EOS            Updated to first cleared column of the cleared row.
  756.    Restrictions   Stay within the screen limits.
  757.    See also       QscrollDown, GotoEos
  758.    Example        To scroll up the entire screen and clear the last row with
  759.                   light cyan on blue:
  760.  
  761.                     QscrollUp (1,1,CRTrows,CRTcols,LightCyan+BlueBG);
  762.  
  763.    ---------------------------------------------------------------------------
  764.    QScrToVscr procedure                                                   Qwik
  765.    ---------------------------------------------------------------------------
  766.    Function       Copies a rows-by-columns block on the current screen to
  767.                   another location on a virtual screen.
  768.    Declaration    QScrToVscr (Row,Col,Rows,Cols,
  769.  
  770.  
  771.    Chapter 2, Procedures and Functions                                 Page 13
  772.    QWIK Screen Utilities                        Reference Guide, Version 5.5
  773.  
  774.  
  775.                               Vrow,Vcol,Vwidth: byte; VAR VScrPtr);
  776.    Screens        All video pages and virtual screens.
  777.    Remarks        Row, Col, Rows, and Cols locates the block on the current
  778.                   screen (Scr) as specified by QScrRec.  This block will be
  779.                   copied to the virtual screen (Vscr) at the location of Vrow
  780.                   and Vcol.  But since Vscr may have a different column width
  781.                   than Scr, Vwidth sets the width.  VScrPtr is the base
  782.                   address of the virtual screen.  By changing QScrRec, you can
  783.                   even copy blocks from one virtual screen to another!  Only
  784.                   the Scr side checks for possible snow.
  785.    EOS            Unaltered.
  786.    Restrictions   Stay within the screen limits.  Not intended for copying
  787.                   between video pages (esp. CGA).
  788.    See also       QVscrToScr
  789.    Example        Copy a 12x40 block from the CRT screen at (5,10) to a
  790.                   virtual screen at (3,2) and look at the result on the CRT:
  791.  
  792.    uses Qwik;
  793.    const
  794.      VScrRows = 20;
  795.      VScrCols = 60;
  796.    var
  797.      { Storage size required is: Rows * Cols shl 1 }
  798.      VScr: array[1..VScrRows] of
  799.            array[1..VScrCols] of word;  { 20 x 60 virtual screen }
  800.      CRTrec,VScrRec: VScrRecType;
  801.    begin
  802.      with VScrRec do             { create specs for virtual screen }
  803.        begin
  804.          Vrows := VScrRows;
  805.          Vcols := VScrCols;
  806.          Vsize := sizeof (VScr);
  807.          Vsnow := false;         { Qwikest when false }
  808.          VEosOfs := 0;
  809.          VScrPtr := @VScr;
  810.        end;
  811.      Qfill (1,1,CRTrows,CRTcols,White+BlueBG,'*');    { Fill  CRT  }
  812.      CRTrec  := QScrRec;                      { Save CRT specs     }
  813.      QScrRec := VScrRec;                      { Set virtual specs  }
  814.      Qfill (1,1,VScrRows,VScrCols,Black+BrownBG,'?'); { Fill  VScr }
  815.      QScrRec := CRTrec;                       { Restore CRT specs  }
  816.      QScrToVscr (5,10,12,40,3,2,VScrCols,VScr);       { Copy Block }
  817.      QstoreToScr (1,1,VScrRows,VScrCols,VScr);       { Take a look }
  818.    end.
  819.  
  820.    ---------------------------------------------------------------------------
  821.    QstoreToMem procedure                                                  Qwik
  822.    ---------------------------------------------------------------------------
  823.    Function       Saves a rows-by-columns block from the current screen to
  824.                   memory.
  825.    Declaration    QstoreToMem (Row,Col,Rows,Cols: byte; VAR Dest);
  826.    Screens        All video pages and virtual screens.
  827.    Remarks        Row, Col, Rows, and Cols locates the block on the current
  828.                   screen as specified by QScrRec.  This block will be copied
  829.                   to Dest, the destination, as one long array.  By changing
  830.  
  831.  
  832.    Chapter 2, Procedures and Functions                                 Page 14
  833.    QWIK Screen Utilities                        Reference Guide, Version 5.5
  834.  
  835.  
  836.                   QScrRec, you can even save blocks from virtual screens!  Be
  837.                   sure to set Qsnow to false for the fastest speed on virtual
  838.                   screens.
  839.    EOS            Unaltered.
  840.    Restrictions   Stay within the screen limits.  Not intended for copying
  841.                   between video pages (esp. CGA).
  842.    See also       QstoreToScr
  843.    Example        Save a 12x40 block from the CRT screen at (5,10), clear the
  844.                   screen, and restore the block:
  845.  
  846.    uses qwik;
  847.    const
  848.      MemRows = 12;
  849.      MemCols = 40;
  850.    var
  851.      { Storage size required is: Rows * Cols shl 1 }
  852.      SavedBlock: array[1..MemRows] of
  853.                  array[1..MemCols] of word;   { 12 x 40 block }
  854.    begin
  855.      Qfill (1,1,CRTrows,CRTcols,White+BlueBG,'*');    { Fill CRT    }
  856.      QstoreToMem (5,10,MemRows,MemCols,SavedBlock);   { Save Block  }
  857.      Qfill (1,1,CRTrows,CRTcols,Yellow+BlackBG,' ');  { Clear CRT   }
  858.      QstoreToScr (5,10,MemRows,MemCols,SavedBlock);   { Take a look }
  859.    end.
  860.  
  861.    ---------------------------------------------------------------------------
  862.    QstoreToScr procedure                                                  Qwik
  863.    ---------------------------------------------------------------------------
  864.    Function       Writes a rows-by-columns block to the current screen from
  865.                   memory.
  866.    Declaration    QstoreToScr (Row,Col,Rows,Cols: byte; VAR Source);
  867.    Screens        All video pages and virtual screens.
  868.    Remarks        Row and Col locates the upper left corner of the block on
  869.                   the current screen as specified by QScrRec.  A block will be
  870.                   written from Source, which is one long array, and placed on
  871.                   the screen as a Rows-by-Cols block.  By changing QScrRec,
  872.                   you can even place blocks to virtual screens!  Be sure to
  873.                   set Qsnow to false for the fastest speed on virtual screens.
  874.    EOS            Unaltered.
  875.    Restrictions   Stay within the screen limits.  Not intended for copying
  876.                   between video pages (esp. CGA).
  877.    See also       QstoreToMem
  878.    Example        Save a 12x40 block from the CRT screen at (5,10) in the
  879.                   heap, clear the screen, and restore the block:
  880.  
  881.    uses qwik;
  882.    const
  883.      MemRows = 12;
  884.      MemCols = 40;
  885.    type
  886.      { Storage size required is: Rows * Cols shl 1 }
  887.      BlockArray = array[1..MemRows] of
  888.                   array[1..MemCols] of word;   { 12 x 40 block }
  889.    var
  890.      BlockPtr: ^BlockArray;
  891.  
  892.  
  893.    Chapter 2, Procedures and Functions                                 Page 15
  894.    QWIK Screen Utilities                        Reference Guide, Version 5.5
  895.  
  896.  
  897.    begin
  898.      Qfill (1,1,CRTrows,CRTcols,White+BlueBG,'*');   { Fill CRT     }
  899.      GetMem (BlockPtr,sizeof(BlockArray));           { Reserve heap }
  900.      QstoreToMem (5,10,MemRows,MemCols,BlockPtr^);   { Save Block   }
  901.      Qfill (1,1,CRTrows,CRTcols,Yellow+BlackBG,' '); { Clear CRT    }
  902.      QstoreToScr (5,10,MemRows,MemCols,BlockPtr^);   { Take a look  }
  903.      FreeMem (BlockPtr,sizeof(BlockArray));          { Free heap    }
  904.    end.
  905.  
  906.    ---------------------------------------------------------------------------
  907.    QviewPage procedure                                                    Qwik
  908.    ---------------------------------------------------------------------------
  909.    Function       Changes the video page to be viewed on the CRT.
  910.    Declaration    QviewPage (PageNum: byte)
  911.    Screens        All video pages.
  912.    Remarks        Standard TP routines are dedicated only to video page 0.
  913.                   However, most video cards, except MDA and some 3270 PC, have
  914.                   more than one video page.  This procedure enables you to
  915.                   view those pages.  The number of video pages available is
  916.                   detected by Qinit and saved in MaxPage.  PageNum is 0-based
  917.                   and the routine will only view other pages when
  918.                   PageNum<=MaxPage.  VideoPage is the currently viewed page.
  919.    EOS            Unaltered.
  920.    See also       QwritePage, QWIK55.DOC, QINITEST.PAS
  921.  
  922.    ---------------------------------------------------------------------------
  923.    QVscrToScr procedure                                                   Qwik
  924.    ---------------------------------------------------------------------------
  925.    Function       Copies a rows-by-columns block from a virtual screen to
  926.                   another location on the current screen.
  927.    Declaration    QVscrToScr (Row,Col,Rows,Cols,
  928.                               Vrow,Vcol,Vwidth: byte; VAR VScrPtr);
  929.    Screens        All video pages and virtual screens.
  930.    Remarks        Row, Col, Rows, and Cols locates the destination on the
  931.                   current screen (Scr) as specified by QScrRec.  A block will
  932.                   be copied from the virtual screen (Vscr) at the location of
  933.                   Vrow and Vcol.  But since Vscr may have a different column
  934.                   width than Scr, Vwidth sets the width.  VScrPtr is the base
  935.                   address of the virtual screen.  By changing QScrRec, you can
  936.                   even copy blocks from one virtual screen to another!  Only
  937.                   the Scr side checks for possible snow.
  938.    EOS            Unaltered.
  939.    Restrictions   Stay within the screen limits.  Not intended for copying
  940.                   between video pages (esp. CGA).
  941.    See also       QScrToVscr
  942.    Example        Copy a 12x40 block from the CRT screen at (5,10) to a
  943.                   virtual screen at (3,2) and look at the result on the CRT:
  944.  
  945.  
  946.    uses Qwik;
  947.    const
  948.      VScrRows = 20;
  949.      VScrCols = 60;
  950.    var
  951.      { Storage size required is: Rows * Cols shl 1 }
  952.  
  953.  
  954.    Chapter 2, Procedures and Functions                                 Page 16
  955.    QWIK Screen Utilities                        Reference Guide, Version 5.5
  956.  
  957.  
  958.      VScr: array[1..VScrRows] of
  959.            array[1..VScrCols] of word;  { 20 x 60 virtual screen }
  960.      CRTrec,VScrRec: VScrRecType;
  961.    begin
  962.      with VScrRec do             { create specs for virtual screen }
  963.        begin
  964.          Vrows := VScrRows;
  965.          Vcols := VScrCols;
  966.          Vsize := sizeof (Vscr);
  967.          Vsnow := false;         { Qwikest when false }
  968.          VEosOfs := 0;
  969.          VScrPtr := @VScr;
  970.        end;
  971.      Qfill (1,1,CRTrows,CRTcols,White+BlueBG,'*');    { Fill  CRT  }
  972.      CRTrec  := QScrRec;                      { Save CRT specs     }
  973.      QScrRec := VScrRec;                      { Set virtual specs  }
  974.      Qfill (1,1,VScrRows,VScrCols,Black+BrownBG,'?'); { Fill  VScr }
  975.      QScrRec := CRTrec;                       { Restore CRT specs  }
  976.      QScrToVscr (5,10,12,40,3,2,VScrCols,VScr);       { Copy Block }
  977.      QstoreToScr (1,1,VScrRows,VScrCols,VScr);       { Take a look }
  978.    end.
  979.  
  980.    ---------------------------------------------------------------------------
  981.    Qwrite procedure                                                       Qwik
  982.    ---------------------------------------------------------------------------
  983.    Function       Writes a string to the current screen with an optional
  984.                   attribute change.
  985.    Declaration    Qwrite (Row,Col: byte; Attr: integer; aStr: string)
  986.    Screens        All video pages and virtual screens.
  987.    Remarks        This routine writes the string aStr at (Row,Col) with the
  988.                   attribute Attr.  If SameAttr is used for Attr, then the
  989.                   attribute will remain the same on the screen.
  990.    EOS            Updated.
  991.    Restrictions   Stay within the screen limits.
  992.    See also       QwriteC, QwriteA, QwriteEos, QwriteEosA
  993.    Example        Write the string "Important" at (2,1) with the attribute of
  994.                   flashing white on red:
  995.  
  996.                     Qwrite (2,1,Blink+White+RedBG,'Important');
  997.  
  998.  
  999.    ---------------------------------------------------------------------------
  1000.    QwriteA procedure                                                      Qwik
  1001.    ---------------------------------------------------------------------------
  1002.    Function       Writes an array (or string) with a specified length to the
  1003.                   current screen with an optional attribute change.
  1004.    Declaration    QwriteA (Row,Col: byte; Attr: integer;
  1005.                            ArrayLength: word; VAR aStr)
  1006.    Screens        All video pages and virtual screens.
  1007.    Remarks        This routine writes the array aStr at (Row,Col) with the
  1008.                   attribute Attr for the number of columns specified by
  1009.                   ArrayLength.  This enables you to write substrings when
  1010.                   specifying a starting index (aStr[i]).  (Other routines like
  1011.                   Qwrite assume the length is the value at aStr[0] and the
  1012.                   starting index is aStr[1].)  Of course, aStr doesn't have to
  1013.  
  1014.  
  1015.    Chapter 2, Procedures and Functions                                 Page 17
  1016.    QWIK Screen Utilities                        Reference Guide, Version 5.5
  1017.  
  1018.  
  1019.                   be a string - it can be any type variable or address in
  1020.                   memory.  If SameAttr is used for Attr, then the attribute
  1021.                   will remain the same on the screen.
  1022.    EOS            Updated.
  1023.    Restrictions   Stay within the screen limits.
  1024.    See also       Qwrite, QwriteC, QwriteEos, QwriteEosA
  1025.    Example        The following will write "Testing out this line."  with the
  1026.                   existing screen attributes:
  1027.  
  1028.                      MyString:='Step B: Testing out this line.';
  1029.                      QwriteA (1,1,SameAttr,22,MyString[9]);
  1030.  
  1031.    ---------------------------------------------------------------------------
  1032.    QwriteC procedure                                                      Qwik
  1033.    ---------------------------------------------------------------------------
  1034.    Function       Writes a string to the current screen with an optional
  1035.                   attribute change and centered between two columns.
  1036.    Declaration    QwriteC (Row,ColL,ColR: byte; Attr: integer;
  1037.                            aStr: string)
  1038.    Screens        All video pages and virtual screens.
  1039.    Remarks        This routine writes the string aStr at (Row,(ColL+ColR-
  1040.                   aStr[0]+1) shr 1) which centers it between the two columns
  1041.                   ColL and ColR and has the attribute Attr.  If SameAttr is
  1042.                   used for Attr, then the attribute will remain the same on
  1043.                   the screen.
  1044.    EOS            Updated.
  1045.    Restrictions   Stay within the screen limits.
  1046.    See also       Qwrite, QwriteA, QwriteEos, QwriteEosA
  1047.    Example        Write a message centered on the screen in row 15 with black
  1048.                   on green attributes:
  1049.  
  1050.                     QwriteC (15,1,CRTcols,White+GreenBG,'My message');
  1051.  
  1052.                   The message will be written in column 36 on an 80 column
  1053.                   screen.
  1054.  
  1055.    ---------------------------------------------------------------------------
  1056.    QwriteEos procedure                                                    Qwik
  1057.    ---------------------------------------------------------------------------
  1058.    Function       Writes a string to the current screen with an optional
  1059.                   attribute change starting at the EOS marker.
  1060.    Declaration    QwriteEos (Attr: integer; aStr: string)
  1061.    Screens        All video pages and virtual screens.
  1062.    Remarks        This routine writes the string aStr at the EOS marker with
  1063.                   the attribute Attr.  If SameAttr is used for Attr, then the
  1064.                   attribute will remain the same on the screen.
  1065.    EOS            Updated.
  1066.    Restrictions   Stay within the screen limits.
  1067.    See also       Qwrite, QwriteA, QwriteC, QwriteEosA
  1068.    Example        Highlight the number in the following message:
  1069.  
  1070.                     Qwrite    ( 1, 1,White+BlueBG ,'There are');
  1071.                     QwriteEos (      Yellow+BlueBG,' 5 ');
  1072.                     QwriteEos (      White+BlueBG ,'minutes left.');
  1073.  
  1074.  
  1075.  
  1076.    Chapter 2, Procedures and Functions                                 Page 18
  1077.    QWIK Screen Utilities                        Reference Guide, Version 5.5
  1078.  
  1079.  
  1080.                   which will write "There are 5 minutes left." as white on
  1081.                   blue except "5" will be yellow on blue.
  1082.  
  1083.    ---------------------------------------------------------------------------
  1084.    QwriteEosA procedure                                                   Qwik
  1085.    ---------------------------------------------------------------------------
  1086.    Function       Writes an array (or string) with a specified length to the
  1087.                   current screen with an optional attribute change starting at
  1088.                   the EOS marker.
  1089.    Declaration    QwriteEosA (Attr: integer; ArrayLength: word; VAR aStr)
  1090.    Screens        All video pages and virtual screens.
  1091.    Remarks        This routine writes the array aStr at the previously set EOS
  1092.                   marker with the attribute Attr for the number of columns
  1093.                   specified by ArrayLength.  This enables you to write
  1094.                   substrings when specifying a starting index (aStr[i]).
  1095.                   (Other routines like QwriteEos assume the length is the
  1096.                   value at aStr[0] and the starting index is aStr[1].)  Of
  1097.                   course, aStr doesn't have to be a string - it can be any
  1098.                   type variable or address in memory.  If SameAttr is used for
  1099.                   Attr, then the attribute will remain the same on the screen.
  1100.    EOS            Updated.
  1101.    Restrictions   Stay within the screen limits.
  1102.    See also       QwriteA, QwriteC, QwriteEos, QwriteEos
  1103.    Example        The following will write "Testing Step B"  with the existing
  1104.                   screen attributes:
  1105.  
  1106.                     MyString:='Step B: Testing out this line.';
  1107.                     QwriteA (1,5,SameAttr, 8,MyString[9]);
  1108.                     QwriteEosA ( SameAttr, 6,MyString[1]);
  1109.  
  1110.    ---------------------------------------------------------------------------
  1111.    QwritePage procedure                                                   Qwik
  1112.    ---------------------------------------------------------------------------
  1113.    Function       Changes the video page on which the QWIK routines write.
  1114.    Declaration    QwritePage (PageNum: byte)
  1115.    Screens        All video pages.
  1116.    Remarks        Standard TP routines are dedicated to only video page 0.
  1117.                   However, most video cards, except MDA and some 3270 PC, have
  1118.                   more than one video page.  This procedure enables QWIK
  1119.                   routines to write to those pages by altering QScrOfs and
  1120.                   QvideoPage which is the current page on which QWIK is
  1121.                   writing. The number of video pages available is detected by
  1122.                   Qinit and saved in MaxPage.  The routine will only change
  1123.                   pages when PageNum<=MaxPage.
  1124.    EOS            Unaltered.
  1125.    See also       QviewPage, QWIK55.DOC, QINITEST.PAS
  1126.  
  1127.    ---------------------------------------------------------------------------
  1128.    SetCursor procedure                                                    Qwik
  1129.    ---------------------------------------------------------------------------
  1130.    Function       Sets a new cursor mode for the CRT.
  1131.    Declaration    SetCursor (Cursor: word)
  1132.    Screens        Any video page as viewed.
  1133.    Remarks        Using the default cursor variables set by Qinit and/or the
  1134.                   cursor constants, a new cursor mode can be set by with any
  1135.  
  1136.  
  1137.    Chapter 2, Procedures and Functions                                 Page 19
  1138.    QWIK Screen Utilities                        Reference Guide, Version 5.5
  1139.  
  1140.  
  1141.                   combination of:
  1142.  
  1143.                     CursorInitial       - detected by Qinit at startup
  1144.                     CursorUnderline     - set by Qinit
  1145.                     CursorHalfBlock     - set by Qinit
  1146.                     CursorBlock         - set by Qinit
  1147.                     CursorOff   ($2000) - turns cursor off
  1148.                     CursorBlink ($6000) - erratic blinking (MDA/CGA)
  1149.  
  1150.                   You can simply add them together (logically is best to
  1151.                   prevent carry errors, but arithmetic is fine).  Although a
  1152.                   separate cursor location is kept for each video page, there
  1153.                   is only one cursor mode for the CRT screen.
  1154.    See also       GetCursor, ModCursor
  1155.    Example 1      Set a half-block cursor with erratic blink:
  1156.  
  1157.                     SetCursor (CursorHalfBlock+CursorBlink);
  1158.  
  1159.    Example 2      Set the scan lines for a block cursor, but leave it turned
  1160.                   off:
  1161.  
  1162.                     SetCursor (CursorBlock+CursorOff);
  1163.  
  1164.    Example 3      Restore the cursor mode at start up and be sure it's turned
  1165.                   on:
  1166.  
  1167.                     SetCursor (CursorInitial);
  1168.                     ModCursor (CursorOn);
  1169.  
  1170.                   or, for those comfortable with bit operations:
  1171.  
  1172.                     SetCursor (CursorInitial and not CursorBlink);
  1173.  
  1174.  
  1175.    ---------------------------------------------------------------------------
  1176.    SetMultiTask procedure                                                 Qwik
  1177.    ---------------------------------------------------------------------------
  1178.    Function       Set QWIK variables to write direct to multi-tasking video
  1179.                   buffers (MTVB).
  1180.    Declaration    SetMultiTask
  1181.    Remarks        This procedure alters the following variables if the program
  1182.                   is running under a multi-tasking environment and the user
  1183.                   has chosen to use the faster MTVB.  If there is no multi-
  1184.                   tasking environment or the MTVB is not used (normal direct
  1185.                   screen video), then these variables are unaltered.  If you
  1186.                   use the CRT unit, be sure to set DirectVideo to false when
  1187.                   using the MTVB.
  1188.  
  1189.                     QScrPtr     - the segment is altered, but the offset is
  1190.                                   usually 0.
  1191.                     Page0Seg    - set to match QSegPtr to indicate page 0.
  1192.                     Qsnow       - set to false.
  1193.                     InMultiTask - True if using MTVB, else false.
  1194.  
  1195.    See also       InMultiTask in VARIABLES section below.
  1196.  
  1197.  
  1198.    Chapter 2, Procedures and Functions                                 Page 20
  1199.    QWIK Screen Utilities                        Reference Guide, Version 5.5
  1200.  
  1201.  
  1202.    Example        Search for locations in the *.PAS demonstration files.
  1203.  
  1204.    ---------------------------------------------------------------------------
  1205.    StrL function                                                          Strs
  1206.    ---------------------------------------------------------------------------
  1207.    Function       Returns a LongInt converted into a string.
  1208.    Declaration    StrL (L: LongInt)
  1209.    Result type    string
  1210.    Remarks        Uses the standard Str procedure to get result.
  1211.    See also       StrLF, StrR, StrRF, StrRFD
  1212.    Example        The following writes "-12345" on the screen:
  1213.  
  1214.                      { var MyNum: integer; }
  1215.                      MyNum := -12345;
  1216.                      Qwrite ( 1, 1,SameAttr,StrL(MyNum));
  1217.  
  1218.    ---------------------------------------------------------------------------
  1219.    StrLF function                                                         Strs
  1220.    ---------------------------------------------------------------------------
  1221.    Function       Returns a LongInt converted into a string and formatted to
  1222.                   be right justified in a fixed field.
  1223.    Declaration    StrLF (L: LongInt; Field: integer)
  1224.    Result type    string
  1225.    Remarks        Uses the standard Str procedure to get result.
  1226.    See also       StrL, StrR, StrRF, StrRFD
  1227.    Example        The following writes "  -12345" on the screen:
  1228.  
  1229.                      { var MyNum: integer; }
  1230.                      MyNum := -12345;
  1231.                      Qwrite ( 1, 1,SameAttr,StrLF(MyNum,8));
  1232.  
  1233.    ---------------------------------------------------------------------------
  1234.    StrR function                                                          Strs
  1235.    ---------------------------------------------------------------------------
  1236.    Function       Returns a Real converted into a string.
  1237.    Declaration    StrR (R: Real)
  1238.    Result type    string
  1239.    Remarks        Uses the standard Str procedure to get result.
  1240.    See also       StrL, StrLF, StrRF, StrRFD
  1241.    Example        The following writes "-1.2345560000E+04" on the screen:
  1242.  
  1243.                      { var MyNum: real; }
  1244.                      MyNum := -12345.56
  1245.                      Qwrite ( 1, 1,SameAttr,StrR(MyNum));
  1246.  
  1247.    ---------------------------------------------------------------------------
  1248.    StrRF function                                                         Strs
  1249.    ---------------------------------------------------------------------------
  1250.    Function       Returns a Real converted into a string and formatted to
  1251.                   be right justified in a fixed field.
  1252.    Declaration    StrRF (R: Real; Field: integer)
  1253.    Result type    string
  1254.    Remarks        Uses the standard Str procedure to get result.
  1255.    See also       StrL, StrLF, StrR, StrRFD
  1256.    Example        The following writes "-1.2346E+04" on the screen:
  1257.  
  1258.  
  1259.    Chapter 2, Procedures and Functions                                 Page 21
  1260.    QWIK Screen Utilities                        Reference Guide, Version 5.5
  1261.  
  1262.  
  1263.  
  1264.                      { var MyNum: real; }
  1265.                      MyNum := -12345.56
  1266.                      Qwrite ( 1, 1,SameAttr,StrRF(MyNum,11));
  1267.  
  1268.    ---------------------------------------------------------------------------
  1269.    StrRFD function                                                        Strs
  1270.    ---------------------------------------------------------------------------
  1271.    Function       Returns a Real converted into a string and formatted to
  1272.                   be right justified in a fixed field with a fixed number of
  1273.                   numbers to the right of the decimal.
  1274.    Declaration    StrRFD (R: Real; Field,Decimal: integer)
  1275.    Result type    string
  1276.    Remarks        Uses the standard Str procedure to get result.
  1277.    See also       StrL, StrLF, StrR, StrRF
  1278.    Example        The following writes "  -12345.6" on the screen:
  1279.  
  1280.                      { var MyNum: real; }
  1281.                      MyNum := -12345.56
  1282.                      Qwrite ( 1, 1,SameAttr,StrRFD(MyNum,10,1));
  1283.  
  1284.    ---------------------------------------------------------------------------
  1285.    WhereC function                                                        Qwik
  1286.    ---------------------------------------------------------------------------
  1287.    Function       Returns the absolute column of the cursor on the currently
  1288.                   written video page.
  1289.    Declaration    WhereC
  1290.    Result type    byte
  1291.    Screens        All video pages only.
  1292.    Remarks        Operates on the currently written video page.  The upper
  1293.                   left corner of the screen (1,1).
  1294.    See also       GotoRC, WhereR
  1295.  
  1296.    ---------------------------------------------------------------------------
  1297.    WhereR function                                                        Qwik
  1298.    ---------------------------------------------------------------------------
  1299.    Function       Returns the absolute row of the cursor on the currently
  1300.                   written video page.
  1301.    Declaration    WhereR
  1302.    Result type    byte
  1303.    Screens        All video pages only.
  1304.    Remarks        Operates on the currently written video page.  The upper
  1305.                   left corner of the screen (1,1).
  1306.    See also       GotoRC, WhereC
  1307.    ---------------------------------------------------------------------------
  1308.  
  1309.  
  1310.  
  1311.  
  1312.  
  1313.  
  1314.  
  1315.  
  1316.  
  1317.  
  1318.  
  1319.  
  1320.    Chapter 2, Procedures and Functions                                 Page 22
  1321.    QWIK Screen Utilities                        Reference Guide, Version 5.5
  1322.  
  1323.  
  1324.    3.  V A R I A B L E S
  1325.  
  1326.    The variables in QWIK.TPU are initialized according to the the kind of
  1327.    system, display(s), and video adapter(s) that Qinit detects.  QWIK uses
  1328.    them for reference and they may also be used in your own programming to
  1329.    help make decisions.
  1330.  
  1331.  
  1332.    SYSTEM HARDWARE
  1333.  
  1334.    System Hardware Variables - These variables indicate the kind of computer
  1335.    that Qinit detected:
  1336.  
  1337.      Variable      Description
  1338.      ------------  -----------------------------------------------------------
  1339.      CpuID         (Type: Byte) Intel CPU identification code.  CpuID can be
  1340.                    any one of the following four constants:
  1341.  
  1342.                      Cpu8086  - Intel 8086/8088
  1343.                      Cpu80186 - Intel 80186/80188
  1344.                      Cpu80286 - Intel 80286
  1345.                      Cpu80386 - Intel 80386
  1346.  
  1347.      SystemID      (Type: Byte) Code for the IBM computer in use and is set by
  1348.                    Qinit.  See SubModelID for values.
  1349.  
  1350.      SubModelID    (Type: Byte) Code for the sub-model of the IBM computer in
  1351.                    use.  This value defaults to 0 the first time Qinit is run.
  1352.                    To get a value, execute GetSubModelID.
  1353.  
  1354.                      SysID Sub-Model SYSTEM
  1355.                      ----- --------- ------------------------------
  1356.                      $FF     n/a     IBM PC
  1357.                      $FE     n/a     IBM PC XT
  1358.                      $FD     n/a     IBM PCjr
  1359.                      $FC     n/a     IBM PC AT (6 MHz, 01/10/84)
  1360.                              $00     IBM PC AT (6 MHz, 06/10/85)
  1361.                              $01     IBM PC AT (8 MHz, 11/15/85)
  1362.                              $02     IBM PC XT (286)
  1363.                              $04     IBM PS/2 model 50
  1364.                              $05     IBM PS/2 model 60
  1365.                      $FB     $00     IBM PC XT (256/640)
  1366.                      $FA     $00     IBM PS/2 model 30
  1367.                              $01     IBM PS/2 model 25
  1368.                      $F9     $00     IBM PC Convertible
  1369.                      $F8     $00     IBM PS/2 model 80 (16 MHz)
  1370.                              $04     IBM PS/2 model 80 (20 MHz)
  1371.                              $09     IBM PS/2 model 70 (16 MHz)
  1372.  
  1373.  
  1374.  
  1375.  
  1376.  
  1377.  
  1378.  
  1379.  
  1380.  
  1381.    Chapter 3, Variables                                                Page 23
  1382.    QWIK Screen Utilities                        Reference Guide, Version 5.5
  1383.  
  1384.  
  1385.    VIDEO HARDWARE
  1386.  
  1387.    Video Hardware Variables - These variables indicate the kind of video
  1388.    card(s) and display(s) that Qinit detected:
  1389.  
  1390.      Variable      Description
  1391.      ------------- ----------------------------------------------------------
  1392.      ActiveDispDev (Type: Byte) Code for the Active Display Device.  Using
  1393.                    IBM's Display Combination Code (DCC), Qinit detects the
  1394.                    video adapter combined with the video display.  The codes
  1395.                    have been set to the following constants.  Note that
  1396.                    monochrome is odd and color is even:
  1397.  
  1398.                      Constant    Code  Description
  1399.                      ----------- ----- --------------------------------
  1400.                      NoDisplay   $00   No display
  1401.                      MdaMono     $01   MDA with 5151 monochrome display
  1402.                      CgaColor    $02   CGA with 5153/4 color display
  1403.                      DCC3        $03   reserved
  1404.                      EgaColor    $04   EGA with 5153/4 color
  1405.                      EgaMono     $05   EGA with 5151 monochrome
  1406.                      PgcColor    $06   PGC with 5175 color
  1407.                      VgaMono     $07   VGA with analog monochrome
  1408.                      VgaColor    $08   VGA with analog color
  1409.                      DCC9        $09   reserved
  1410.                      DCC10       $0A   reserved
  1411.                      McgaMono    $0B   MCGA with analog monochrome
  1412.                      McgaColor   $0C   MCGA with analog color
  1413.                      n/a         $0D to $FE - reserved
  1414.                      Unknown     $FF   unknown device
  1415.  
  1416.      ActiveDispDev3270 (Type: Byte) Code for the Active Display Device on the
  1417.                    3270 PC.  Only the $FF code corresponds to the constant
  1418.                    "Unknown".
  1419.  
  1420.                      Code  Monitor       Adapter
  1421.                      ----  ------------  ---------------------
  1422.                      $00   5151 or 5272  for 5151 or 5272
  1423.                      $01   3295          for 3295
  1424.                      $02   5151 or 5272  for 5151 or 5272 plus
  1425.                                           XGA graphics
  1426.                      $03   5279          3270 PC G
  1427.                      $04   5379 C01      3270 PC GX
  1428.                      $05   5379 M01      3270 PC GX
  1429.                      $06   reserved
  1430.                      $07   reserved
  1431.                      $FF   Unknown, not a 3270 PC
  1432.  
  1433.      AltDispDev    (Type: Byte) Code for the Alternate Display Device.  This
  1434.                    code is detected by Qinit for a second, but inactive
  1435.                    adapter and display, just in case there are dual monitors.
  1436.                    It uses the same constants as ActiveDispDev listed above.
  1437.  
  1438.      AltDispDevPCC (Type: Word) Code for the Alternate Display adapter on the
  1439.                    PC Convertible.  In hex, it corresponds to the model number
  1440.  
  1441.  
  1442.    Chapter 3, Variables                                                Page 24
  1443.    QWIK Screen Utilities                        Reference Guide, Version 5.5
  1444.  
  1445.  
  1446.                    of the attached device:
  1447.  
  1448.                      Model  Description
  1449.                      -----  --------------------
  1450.                      $   0  No alternate adapter
  1451.                      $5140  LCD
  1452.                      $5153  CGA type
  1453.                      $5151  Monochrome type
  1454.  
  1455.      CardSeg       (Type: Word) Video segment address of the video "card" as
  1456.                    detected by Qinit.
  1457.  
  1458.      CardSnow      (Type: Boolean) Set to true for wait-for-retrace for the
  1459.                    video "card" as detected by Qinit.
  1460.  
  1461.      EgaInfo       (Type: Byte) Absolute variable at $0040:$0087 has the
  1462.                    following information when the EGA (or VGA) is present:
  1463.  
  1464.                      Bits  Description
  1465.                      ----  -------------------------------------------
  1466.                      7     (0) Clear, (1) Keep video data after
  1467.                            video mode set
  1468.                      6,5   (00) 64k, (01), 128k, (10) 192k, (11) 256k,
  1469.                            memory on the card.
  1470.                      4     Reserved
  1471.                      3     (0) EGA active, (1) EGA not active
  1472.                      2     (0) Disable,    (1) Enable wait-for-display
  1473.                      1     (0) CD/ECD      (1) MD attached
  1474.                      0     (0) Active,     (1) Inactive CD emulation
  1475.  
  1476.      EgaSwitches   (Type: Byte) By checking the value of this byte, you can
  1477.                    determine the monitor connected to the EGA, the alternate
  1478.                    video system, and the start up default.  The byte is a copy
  1479.                    of how the dip switches are set on the card where on=0 and
  1480.                    off=1.  The primary is the default.  When the ECD is set
  1481.                    for 640x200, it is emulating the CD including the cursor
  1482.                    mode.  Qinit directly tests for the alternate device rather
  1483.                    than assuming it.
  1484.  
  1485.                      Switch    Primary             Secondary
  1486.                      --------  ------------------- -------------------
  1487.                      0000 = 0  MDA + MD            EGA + CD - 40x25
  1488.                      0001 = 1  MDA + MD            EGA + CD - 80x25
  1489.                      0010 = 2  MDA + MD            EGA + ECD (640x200)
  1490.                      0011 = 3  MDA + MD            EGA + ECD (640x350)
  1491.                      0100 = 4  CGA + CD - 40x25    EGA + MD
  1492.                      0101 = 5  CGA + CD - 80x25    EGA + MD
  1493.                      0110 = 6  EGA + CD - 40x25    MDA + MD
  1494.                      0111 = 7  EGA + CD - 80x25    MDA + MD
  1495.                      1000 = 8  EGA + ECD (640x200) MDA + MD
  1496.                      1001 = 9  EGA + ECD (640x350) MDA + MD
  1497.                      1010 =10  EGA + MD            CGA + CD - 40x25
  1498.                      1011 =11  EGA + MD            CGA + CD - 80x25
  1499.  
  1500.      Have3270      (Type: Boolean) If Qinit detects 3270 PC equipment or
  1501.  
  1502.  
  1503.    Chapter 3, Variables                                                Page 25
  1504.    QWIK Screen Utilities                        Reference Guide, Version 5.5
  1505.  
  1506.  
  1507.                    software, this variable is set to true.  In addition, the
  1508.                    ActiveDispDev is either MdaMono or CgaColor.  Note that
  1509.                    there may or may not be graphics capability in either case;
  1510.                    Qinit is not meant to detect graphics.  See
  1511.                    ActiveDispDev3270 for codes.
  1512.  
  1513.      HavePS2       (Type: Boolean) Qinit sets HavePS2 to true if the DCC is
  1514.                    supported.  This means that the program has detected a PS/2
  1515.                    video card whether it is integrated on a model 30, a PS/2
  1516.                    Display Adapter installed on an IBM XT, or the like.  It
  1517.                    also means that either MCGA or VGA is present, but not
  1518.                    necessarily active.  To know which, just check the DCC.
  1519.  
  1520.      HercModel     (Type: Byte) Model of the attached Hercules video card.  If
  1521.                    no card is detected, then HercModel=NoHerc.
  1522.  
  1523.                      Constant    Code  Description
  1524.                      ----------  ----  ---------------------
  1525.                      NoHerc       0    No Hercules card
  1526.                      HgcMono      1    HGC
  1527.                      HgcPlus      2    HGC Plus
  1528.                      HercInColor  3    Hercules InColor Card
  1529.  
  1530.      MaxPage       (Type: Byte) Maximum possible 0-based video page number.
  1531.                    See TABLE 1 in QWIK55.DOC for ranges.
  1532.  
  1533.  
  1534.    VIDEO SOFTWARE
  1535.  
  1536.    Video Software Variables - These variables indicate the current video mode
  1537.    and screen characteristics to which QWIK is writing and what is being
  1538.    viewed on the CRT.  There are several absolute variables listed that
  1539.    duplicate some of the global variables like CRTcolumns and CRTcols.  It is
  1540.    preferable to use the global ones, where the absolute ones are only needed
  1541.    for handling exceptions.
  1542.  
  1543.      Variable      Description
  1544.      ------------  -----------------------------------------------------------
  1545.      CRTcols       (Type: Byte) Global variable equal to CRTcolumns.
  1546.  
  1547.      CRTcolumns    (Type: Word) Absolute variable directly accesses the 1-
  1548.                    based currently viewed number of CRT columns for any card
  1549.                    or video mode.
  1550.  
  1551.      CRTrows       (Type: Byte) 1-based number of CRT rows for any card or
  1552.                    video mode.
  1553.  
  1554.      EgaFontSize   (Type: Word) Absolute variable directly accesses the 1-
  1555.                    based number of horizontal scan lines per character for
  1556.                    EGA/MCGA/VGA.
  1557.  
  1558.      EgaRows       (Type: Byte) Absolute variable directly accesses the 0-
  1559.                    based number of rows on the current screen for EGA, MCGA,
  1560.                    and VGA.  This number is used to make CRTrows which is
  1561.                    handled by Qinit.
  1562.  
  1563.  
  1564.    Chapter 3, Variables                                                Page 26
  1565.    QWIK Screen Utilities                        Reference Guide, Version 5.5
  1566.  
  1567.  
  1568.  
  1569.      InMultiTask   (Type: Boolean)  This flag indicates if MTVB is being used
  1570.                    for the screen in lieu of the normal screen.  It defaults
  1571.                    to false and is possibly altered with SetMultiTask if the
  1572.                    multitasking software has be instructed to expect writing
  1573.                    direct to the MTVB (not direct screen).
  1574.  
  1575.      Page0seg      (Type: Word) Segment for the base page, page 0.  In multi-
  1576.                    tasking environments, change this value to its video
  1577.                    display buffer.  QScrSeg and QScrOfs should also be set.
  1578.  
  1579.      QEosOfs       (Type: Word) 0-base offset where a Q*Eos procedure will
  1580.                    write.
  1581.  
  1582.      QScrSeg       (Type: Word) Segment for QWIK writing which is altered when
  1583.                    changing pages.  QScrSeg=Page0seg on page 0.
  1584.  
  1585.      QScrOfs       (Type: Word) Offset for QWIK writing needed for virtual
  1586.                    screens.  The usual value is 0 for the video pages.
  1587.  
  1588.      QScrPtr       (Type: Pointer) Combines QScrSeg and QScrOfs
  1589.  
  1590.      QScrRec       (Type: VScrRecType) Record of essential variables for QWIK
  1591.                    screen writing.  This variable occupies the same space and
  1592.                    in the same order of:
  1593.  
  1594.                      Global    QScrRec
  1595.                      -------   -------
  1596.                      CRTrows   Vrows
  1597.                      CRTcols   Vcols
  1598.                      CRTsize   Vsize
  1599.                      Qsnow     Vsnow
  1600.                      QEosOfs   VEosOfs
  1601.                      QScrPtr   VScrPtr
  1602.  
  1603.                    These variables are also described in this section.  As a
  1604.                    record, the variables can be swapped easily when writing to
  1605.                    virtual screens.  See the example in QVscrToScr procedure.
  1606.  
  1607.      Qsnow         (Type: Boolean) Set to true for wait-for-retrace (snow)
  1608.                    while QWIK is writing.
  1609.  
  1610.      QvideoPage    (Type: Byte) Video page to which QWIK is writing which is
  1611.                    set by QwritePage.  It is initially 0.
  1612.  
  1613.      QvideoMode    (Type: Byte) Video mode detected by Qinit.
  1614.  
  1615.      ScrollAttr    (Type: Integer) The attribute used to clear the blank row
  1616.                    when QEosLn is used.
  1617.  
  1618.      VideoMode     (Type: Byte) Absolute variable directly accesses the
  1619.                    current video mode in low memory.
  1620.  
  1621.      VideoPage     (Type: Byte) Absolute variable directly accesses the
  1622.                    currently viewed video page in low memory.
  1623.  
  1624.  
  1625.    Chapter 3, Variables                                                Page 27
  1626.    QWIK Screen Utilities                        Reference Guide, Version 5.5
  1627.  
  1628.  
  1629.  
  1630.      VScrRecType   The type for the record of essential variables for QWIK
  1631.                    screen writing to virtual screens.  This enables an easy
  1632.                    exchange of data between the CRT and virtual screens.
  1633.  
  1634.  
  1635.    VIDEO CURSOR
  1636.  
  1637.    Video Cursor Variables and Constants - These variables and constants give
  1638.    you easy tools to combine with bit operations to display your choice of
  1639.    cursor modes.  The variables default with the cursor on and no skew which
  1640.    are detected and set by Qinit at startup:
  1641.  
  1642.      Variable          Description
  1643.      ----------------- --------------------------------------------------------
  1644.      CursorBlock       (Type: Word) Cursor mode value for the full cell.
  1645.  
  1646.      CursorHalfblock   (Type: Word) Cursor mode value for a half block usually
  1647.                        used for insert editing.
  1648.  
  1649.      CursorInitial     (Type: Word) Cursor mode value detected at startup.
  1650.  
  1651.      CursorUnderline   (Type: Word) Cursor mode value for the normal
  1652.                        underline.
  1653.  
  1654.  
  1655.      Constant     Value  Description
  1656.      -----------  -----  -----------------------------------------------------
  1657.      CursorBlink  $6000  Used to alter bits 13/14 to create erratic blinking
  1658.                          on MDA/CGA cards.  (EGA/VGA cards turn the cursor
  1659.                          off.)
  1660.  
  1661.      CursorOff    $2000  Used to alter bits 13/14 or can be used by itself to
  1662.                          turn the cursor off.
  1663.  
  1664.      CursorOn     $0000  Used to alter bits 13/14 in ModeCursor to turn the
  1665.                          cursor back on.
  1666.  
  1667.  
  1668.  
  1669.  
  1670.  
  1671.  
  1672.  
  1673.  
  1674.  
  1675.  
  1676.  
  1677.  
  1678.  
  1679.  
  1680.  
  1681.  
  1682.  
  1683.  
  1684.  
  1685.  
  1686.    Chapter 3, Variables                                                Page 28
  1687.